import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class HashSetDemo {
    //此类实现 Set 接口，由哈希表（实际上是一个 HashMap 实例）支持。
    // 它不保证 set 的迭代顺序；特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

    public static void main(String[] args) {
        HashSet<String> hashSet = new HashSet<>();
        hashSet.add("关羽");
        hashSet.add("马超");
        hashSet.add("张飞");
        hashSet.add("黄忠");
        hashSet.add("赵云");

        System.out.println("hashSet之中还有"+hashSet.size()+"个元素");
        System.out.println("**********");
        Iterator<String> iterator1 = hashSet.iterator();
        while(iterator1.hasNext()) {
            System.out.println(iterator1.next());
        }

        System.out.println("**********");
        hashSet.remove("关羽");
        System.out.println("hashSet之中还有"+hashSet.size()+"个元素");

        System.out.println("**********");
        Iterator<String> iterator2 = hashSet.iterator();
        while(iterator2.hasNext()) {
            System.out.println(iterator2.next());
        }

        //也可以利用HashSet构造一个ArrayList,然后利用ArrayList随机访问的特点利用下标来访问元素
        ArrayList<String> arrayList = new ArrayList<>(hashSet);

        //第一次利用迭代器进行访问
        Iterator<String> iterator = arrayList.iterator();
        while(iterator.hasNext()) {
            System.out.print(iterator.next() + ",");
        }
        System.out.println();
        System.out.println("*************");
        //无需重置迭代器，利用下标随机访问ArrayList中的元素
        for (String s : arrayList) {
            System.out.print(s + ",");
        }

        //判断HashSet是否包含指定的元素
        System.out.println(hashSet.contains("赵云"));
        System.out.println(hashSet.contains("关羽"));

        if (hashSet.isEmpty()) {
            System.out.println("hashSet为空！");
        } else {
            System.out.println("hashSet不为空！");
        }
    }
}
